Варик подключает разные функции ИИ к разным игрокам, например, юниты компьютерного игрока не будут бежать в другой конец карты, а вернутся на свою позицию через какое-то расстояние или время. Теперь известно, что и за ретаргет при стане тоже ИИ отвечает.
идея неплохая, если не считать, что заклинание будет диспеллить эффект похожего заклинания.
Например если юнит в стане от молота бурь, то молот бурь-даммикаст снимет бафф с него. С кислотной бомбой и т.п. однозначно диспеллит, насчёт молота - скорее всего.
Нет, станы перебивают тока сильный, слабого. Ну или есть большое отличие в уровнях. Аксид бомбы будут перебивать если урон выше, а так просто продливать бафф, чертики тоже самое.
Кстати да, забыл написать, длительность 0.01, бафф сразу же после проверки удаляем.
Если вы юзайте аксид бомбу для нанесения урона, придется наносит урон триггерно.
Кстати, большинство скиллов вроде аксид бомбы или чертика работают так.
Сначала 0.00 ед. урона, после бафф, после урон указанный в поле способности.
Но молот бурь работает иначе, сначала урон указанный в поле способности, после 0.00 ед. урона и бафф стана.
Чем сложнее модель снаряда - тем больше нагрузки в сумме
Например 100 обыкновенных кирпичей не будут сильно нагружать
А вот к примеру 100 болтов с "электрическим" эффектом ещё и с анимацией, ещё как будут нагружать
то скорость разная, то вылетают не из героя а из какой то псевдо центральной точки
в общем я полностью добился желаемого результата, никакого прерывания, ни каких лагов и странных поведений (то что снаряды врезаются в трупы так и задумано =))
вот мой код
//! beginusercode
--какие то общие функции
function MoveX (x, Dist, Angle)
return x+Dist*Cos(Angle*0.0175)
end
function MoveY (x, Dist, Angle)
return x+Dist*Sin(Angle*0.0175)
end
function AbilityId(id)
return id:byte(1) * 0x1000000 + id:byte(2) * 0x10000 + id:byte(3) * 0x100 + id:byte(4)
end
function Out(x,y)
return ( ( GetRectMinX(bj_mapInitialPlayableArea) <= x ) and ( x <= GetRectMaxX(bj_mapInitialPlayableArea) ) and ( GetRectMinY(bj_mapInitialPlayableArea) <= y ) and ( y <= GetRectMaxY(bj_mapInitialPlayableArea) ) ) or IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY) == false
end
GetTerrainZ_location = Location(0, 0)
function GetTerrainZ(x,y)
MoveLocation(GetTerrainZ_location, x, y);
return GetLocationZ(GetTerrainZ_location);
end
function ehandler( err )
print( "ERROR:", err )
end
--/////// глобалки (хотя какая разница где объявить то)
perebor=CreateGroup()
--/////// триггер
local trigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1, 1 do
TriggerRegisterPlayerUnitEvent(trigger, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT)
end
TriggerAddCondition(trigger, Condition(function() return
GetOwningPlayer(GetTriggerUnit()) == Player(0)
end))
local d=0
TriggerAddAction(trigger, function()
local u=GetTriggerUnit()
local z=GetTerrainZ(GetUnitX(u),GetUnitY(u))
print("perodstart")
TimerStart(CreateTimer(), 0.1, true, function()
d=d+1
--print("abiclick "..d)
-- будущая фукция запуска снаряда
local x=GetUnitX(u)
local y=GetUnitY(u)
local eff=AddSpecialEffect("Abilities\\Weapons\\DemolisherFireMissile\\DemolisherFireMissile.mdl", x, y)
local d2=1000
local a=GetUnitFacing(u)
TimerStart(CreateTimer(), 0.032, true, function()
d2=d2-10
x=MoveX(x,25,a)
y=MoveY(y,25,a)
BlzSetSpecialEffectPosition(eff, x, y, GetTerrainZ(x,y)+30)
-- урон
local e=nil
GroupEnumUnitsInRange(perebor,x,y,80,null)
while true do
e = FirstOfGroup(perebor)
if e == nil then break end
if IsUnitEnemy(e, GetOwningPlayer(u)) then
UnitDamageTarget( u, e, BlzGetUnitBaseDamage(u, 1), false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS )
-- print("наносим урон")
DestroyEffect(eff)
eff=nill
end
GroupRemoveUnit(perebor,e)
end
--print(d2)
if d2<=0 or Out(x,y)==false or eff==nil then
-- print("УМРИ!")
DestroyEffect(eff)
DestroyTimer(GetExpiredTimer())
end
end)
end)
end)
//! endusercode
а вот и карта
Выражаю огромную благодарность NazarPunk, и Prog за оказанную помощь и наставления
Выводы:
Более навороченные (в техническом плане) способы не всегда самые оптимальные
Точно также можно двигать эффекты и на мемхаке, так что 126 пат так же может удостоится высокой производительностью для огромного количества снарядов
Мой комп держит на 1 экране около 700 объектов в режиме 60+ FPS (с отключенной вертикальной синхронизацией, это когда макс фпс за 200)
EviLInside, в структуре находится таймер и группа, таймер запускаешь на функцию удаления, а всем юнитам в группе в этой структуре сохраняешь саму структуру, чтобы доставать и наносить разовый урон если кто-то из них его получит от постороннего источника, в таймер тоже сохраняешь, по окончании действия таймера выбираешь всех юнитов в группе и очищаешь им сохранённую структуру, т.к. сама структура лишь 1 раз создалась на этот спелл, то и уничтожить её вместе с группой и таймером достаточно 1 раз, в истекающем таймере
короче один раз создал и посохранял её везде, потом уничтожил в истекающем таймере и очистил везде где сохранял
В war3me некоторые текстуры указаны как ReplaceableID X, где значения X перечислены в окне добавления новой текстуры. Это изменяемые текстуры, которые могут принимать разные значения цвета игрока, свечения игрока, текстуры деревьев и прочее. Так как у тебя дерево, то там заменяется текстура, когда дерево оказывается порченным. Ещё можешь в редакторе объектов указать дереву другой заменяемый файл текстур, не все текстуры деревьев будут нормально отображаться, но попробовать стоит, если желаешь сделать необычное дерево без импорта.
Чтобы добавить модель с вариациями, нужно импортировать по одному пути модели вариаций, которые будут иметь одинаковое имя, но в конце индекс 0, 1, 2, 3,.. А в РО указать путь к модели без индексов и с количеством вариаций. ЧТОБЫ ДЕРЕВЬЯ ОТОБРАЖАЛИСЬ НЕ ТОЛЬКО В РЕДАКТОРЕ, НО И В ИГРЕ, НЕОБХОДИМО ЕЩЁ ИМПОРТИРОВАТЬ ЭТИ ЖЕ МОДЕЛИ С ИНДЕКСАМИ 0S, 1S, 2S, 3S,..
Можешь не указывать ReplaceableID текстуры, а сразу прописать необходимый путь к ней в mdlvis. Сначала добавляю любую новую текстуру в war3me, потом в mdlvis переименовываю её в нужный путь, потом в war3me указываю эту новую текстуру в Material Manager.
Если не получается, то скинь карту с твоей моделью дерева.
Как где? Поиск в помощь, вот ссылка
Кто тебе сказал что ниче менять не будут? Еще как будут, ожидается овер 100500 правок и нововведений, вот когда сделают - тогда будешь проектировать под стабильный рефордж, то будет еще 1 карта, если чо близзарды в варкравте ломали совместимость карт из патча в патч.
» IrInA Host Bot / Верификация
» WarCraft 3 / АИ приоритеты цели
» IrInA Host Bot / Заявка на верификацию
» WarCraft 3 / Восход города полей
» WarCraft 3 / High Elven Japanese Citizens Assets Icon
» WarCraft 3 / Japanese United Nations Costumes NPCs
» WarCraft 3 / Night Elven Japanese Citizens
» Администрация XGM / Рекомендации
» WarCraft 3 / Снаряды заклинаний
» WarCraft 3 / Орк скверны
» WarCraft 3 / Не меняется волна мобов
» WarCraft 3 / Сценария для проекта
» WarCraft 3 / Программы для импорта.
» IrInA Host Bot / Заявка на верификацию
» IrInA Host Bot / Восхождение Иллидана
» IrInA Host Bot / не могу зайти играть
» WarCraft 3 / Редактор версия 1.32 REFORGED